import random
import math

class Parameter(object):
    """description of class"""
    numBits = 30
    bitList = []
    maxVal = 1
    deltaQ = 1

    #----------------------------------------------------------------------
    def __init__(self, maxVal, nBits):
      self.maxVal = maxVal
      self.numBits = nBits
      self.deltaQ = maxVal/(2**nBits - 1)
      self.bitList = [0 for i in range(nBits)]

    #----------------------------------------------------------------------
    def SetListValues(self, valueList):
      self.bitList = valueList[:self.numBits]

    #----------------------------------------------------------------------
    def GetValue(self):
      num = sum([math.pow(2, it)*self.bitList[it]  for it in range(self.numBits)])
      return self.deltaQ * num


    #----------------------------------------------------------------------
    def Cruzar(self, pareja):
      punto = random.randrange(self.numBits-2) +1
      hijo1 = Parameter(self.maxVal, self.numBits)
      hijo1.SetListValues(self.bitList[:punto] + pareja.bitList[punto:])
      hijo2 = Parameter(self.maxVal, self.numBits)
      hijo2.SetListValues(pareja.bitList[:punto] + self.bitList[punto:])
      return (hijo1, hijo2)

    #----------------------------------------------------------------------
    def Mutar(self):
      punto = random.randrange(self.numBits -1)
      self.bitList[punto] = (self.bitList[punto] +1)%2

